package com.example.producer;

import com.alibaba.rocketmq.client.exception.MQClientException;
import com.alibaba.rocketmq.client.producer.DefaultMQProducer;
import com.alibaba.rocketmq.client.producer.SendResult;
import com.alibaba.rocketmq.common.message.Message;

import java.util.concurrent.TimeUnit;

/**
* @Author: zhaoben
* @Date: 2017/2/5 10:53
* @Desc: 生产者
*/
public class Producer {

    public static void main(String[] args) throws MQClientException{
        /*
        * 一个应用创建一个 Producer，由应用来维护此对象，可以设置为全局对象或者单例对象
        * 注意：ProducerGroupName 需要由应用来保证唯一
        * ProducerGroup 这个概念发送普通消息时，作用不大，但是发送分布式消息时，比较关键
        * 因为服务器会回查这个 Group 下的 Producer
        * */
        DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName");
        producer.setNamesrvAddr("172.17.147.18:9876");
        producer.setInstanceName("Producer");

        /**
         * Producer对象在使用之前必须要调用start初始化，初始化一次即可
         * 注意：切记不可以在每次发送消息时，都调用start方法
         */
        producer.start();

        for(int i=0; i<100; i++){
            try{
                {
                    Message msg = new Message("TopicTest1", // topic
                            "TagA", // tag
                            "OrderID001", // key
                            ("Hello World".getBytes()) // body
                    );
                    SendResult sendResult = producer.send(msg);
                    System.out.println(sendResult);
                }
                {
                    Message msg = new Message("TopicTest2",// topic
                            "TagB",// tag
                            "OrderID0034",// key
                            ("Hello World").getBytes());// body
                    SendResult sendResult = producer.send(msg);
                    System.out.println(sendResult);
                }

                {
                    Message msg = new Message("TopicTest3",// topic
                            "TagC",// tag
                            "OrderID061",// key
                            ("Hello World").getBytes());// body
                    SendResult sendResult = producer.send(msg);
                    System.out.println(sendResult);
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        /**
         * 应用退出时，要调用shutdown来清理资源，关闭网络连接，从MetaQ服务器上注销自己
         * 注意：我们建议应用在JBOSS、Tomcat等容器的退出钩子里调用shutdown方法
         */
        producer.shutdown();
    }
}
